<?php
require_once(dirname(__FILE__)."/../lib/Loader.php");
cfgload("defines");
cfgload("strings/kinoItunesList");
cload("Smarty.smartyRenderer");
cload("database.dbquery");
cload("requestProcessor");
cload("kinopoisk.kinoPoiskFilm");
cload("itunes.itunesRow");
cload("itunes.ItunesInfo");

/**
 * Description of kinoItunesList
 *
 * @author Di_Moon
 */
class kinoItunesList extends smartyRenderer {
    protected $_dbh;                    // связь с БД
    protected $_kpId;                   // номер фильма по кинопоиску
    protected $_kpFilm;                 // информация о фильме
    protected $_countryCode;            // текущий код страны
            
    function __construct($dbh) {
        parent::__construct();
        
        $this->_dbh = $dbh;
        
        $this->_kpId = (int)requestProcessor::getVar("kpid");
        $this->_kpFilm = new kinoPoiskFilm($this->_dbh, $this->_kpId);
        $this->assign("kpid", $this->_kpId);
        
        $this->_countryCode = requestProcessor::getVar("ccode", "us");
        $this->assign("countryCode", $this->_countryCode);
    }
    
    // Рендерит список
    function showList() {
        $this->assign("countryCodes", _itunes_country_codes());
        
        $row = new itunesRow($this->_dbh, $this->_kpId, $this->_countryCode);
        $countryCodeHaveData = $row->load();        
        $row->set("artworkUrlBig", ItunesInfo::posterURLProcessor($row->get("artworkUrl30")));
        $this->assign("itunes", $row->getElements());        
        $this->assign("countryCodeHaveData", $countryCodeHaveData);        
        $this->assign("kpFilm", $this->_kpFilm->getElements());
        
        return $this->fetch("kinoItunesList.tpl");
    }
    
    function showChoose() {
        $itunes = new ItunesInfo($this->_kpId);
        $filmname = "";
        $force = 0;
        
        // Если код страны ru, то будем искать по русскому названию, 
        // в противном случае - по оригинальному
        if($this->_countryCode == "ru") {
            $filmname = $this->_kpFilm->get("filmName");
        } else {
            $filmname = $this->_kpFilm->get("filmNameOriginal");
        }
        
        // Проверим, нет ли поиска по введённому пользователем имени фильма
        if(requestProcessor::getVar("_specialInput", "") != "") {
            $filmname = requestProcessor::getVar("_specialInput");
            $force = 1;
        };
        
        $itunes->setFilmName($this->_countryCode, $filmname);
        $this->assign("ITUNES_QUERY", $itunes->generateURL($this->_countryCode));
        $this->assign("ITUNES_DATA_FROM_CACHE", $itunes->isDataFromCache($this->_countryCode, $force));
        
        $jsonData = $itunes->requestJsonData($this->_countryCode, $force);
        if($jsonData) {
            $data = json_decode($jsonData);
            $resultsCount = $data->resultCount;
            $resultsData = $data->results;
            
            for($i=0;$i<$resultsCount;$i++) {
                $resultsData[$i]->_json = htmlspecialchars(json_encode(array($resultsData[$i])));
            }
            
            $this->assign("resultsCount", $resultsCount);
            $this->assign("resultsData", $resultsData);
            $this->assign("_specialInput", $filmname);
            return $this->fetch("kinoItunesQueryList.tpl");
        } else {
            return $this->getError(strings_kinoItunesList::string("GET_FROM_ITUNES_ERROR", TPL_ERR_FATAL));
        }
    }
    
    function render() {
        // Проверим корректность входных данных
        if(!$this->_kpFilm->filmPresent()) {
            return $this->getError(strings_kinoItunesList::string("FILM_NOT_FOUND"), TPL_ERR_FATAL);
        }
        
        if(!array_key_exists($this->_countryCode, _itunes_country_codes())) {
            return $this->getError(strings_kinoItunesList::string("INVALID_COUNTRYCODE"), TPL_ERR_FATAL);
        }
        
        if(requestProcessor::getVar("action")=="getdata") return $this->showChoose();

        return $this->showList();
    }
}

?>
